home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-12-03 | 7.9 KB | 379 lines | [TEXT/PJMM] |
- unit MyUtils;
-
- interface
-
- function TrapAvailable (tNumber: INTEGER): BOOLEAN;
- function MyNumToString (n: longInt): str255;
- function NumToStr (n: longInt): str255;
- function NN (n: longInt; len: integer): str31;
- function N2 (n: longInt): str31;
- function StrToNum (s: str255): longInt;
- procedure DotDotDot (var s: str255; var width: integer);
- procedure SetItemEnable (mh: menuHandle; item: integer; enable: boolean);
- procedure SetIDItemEnable (menu, item: integer; enable: boolean);
- function GetIDItemEnable (menu, item: integer): boolean;
- function GetItemEnable (mh: menuHandle; item: integer): boolean;
- procedure DotItem (mh: menuHandle; item: integer; dotted: boolean);
- function MyFrontWindow: boolean;
- function DAFrontWindow: boolean;
- function GetIndStrSize (size, id, index: integer): str255;
- function GetDirID (wdrn: integer; var vrn: integer; var dirID: longInt): OSErr;
- function GetVolInfo (var name: str63; var vrn: integer; index: integer; var CrDate: longInt): OSErr;
- procedure PlotSICN (id: integer; index, v, h: integer);
- function HLockState (h: univ handle): signedByte;
- function LookupStrh (id: integer; match: str255): str255;
- function LookupStrhNumber (id: integer; n: longInt): str255;
- procedure MemFill (p: univ ptr; len: longInt; value: integer);
- procedure ZeroFill (p: univ ptr; len: longInt);
- function CheckCancel: boolean;
- procedure TrashHandle (h: handle);
- procedure ZeroBlock (p: ptr; len: longInt);
- function WindowInWindowList (w: windowPtr): boolean;
-
- procedure SegmentInit;
- procedure SegmentUtil;
- procedure SegmentTerm;
-
- implementation
-
- uses
- MyTypes, Traps, Folders;
-
- {$S Init}
- procedure SegmentInit;
- begin
- end;
-
- {$S Util}
- procedure SegmentUtil;
- begin
- end;
-
- {$S Term}
- procedure SegmentTerm;
- begin
- end;
-
- {$S Util}
- function TrapAvailable (tNumber: INTEGER): BOOLEAN;
- {Check to see if a given trap is implemented. Babble as taken from IM6 }
- const
- TrapMask = $0800;
- var
- tType: TrapType;
- begin
- if BAND(tNumber, TrapMask) > 0 then
- tType := ToolTrap
- else
- tType := OSTrap;
- if tType = ToolTrap then begin
- tNumber := BAND(tNumber, $7FF);
- if tNumber >= $400 then
- tNumber := _Unimplemented
- else if tNumber >= $200 then
- if NGetTrapAddress($A86E, ToolTrap) <> NGetTrapAddress($AA6E, ToolTrap) then
- tNumber := _Unimplemented;
- end;
- TrapAvailable := NGetTrapAddress(tNumber, tType) <> GetTrapAddress(_Unimplemented);
- end; {TrapAvailable}
-
- {$S Util}
- function MyNumToString (n: longInt): str255;
- var
- s: str255;
- begin
- if abs(n) < 4096 then
- NumToString(n, s)
- else if abs(n) < 4194304 then begin
- NumToString(n div 1024, s);
- s := Concat(s, 'k');
- end
- else begin
- NumToString(n div 1048576, s);
- s := Concat(s, 'M');
- end;
- MyNumToString := s;
- end;
-
- {$S Util}
- function NumToStr (n: longInt): str255;
- var
- s: str255;
- begin
- NumToString(n, s);
- NumToStr := s;
- end;
-
- {$S Util}
- function NN (n: longInt; len: integer): str31;
- var
- s: str31;
- begin
- s := NumToStr(n);
- while length(s) < len do
- s := concat('0', s);
- NN := s;
- end;
-
- function N2 (n: longInt): str31;
- begin
- N2 := NN(n, 2);
- end;
-
- {$S Util}
- function StrToNum (s: str255): longInt;
- var
- n: longInt;
- begin
- StringToNum(s, n);
- StrToNum := n;
- end;
-
- {$S Util}
- procedure DotDotDot (var s: str255; var width: integer);
- var
- maxwidth, len: integer;
- begin
- maxwidth := width;
- width := StringWidth(s);
- if width > maxwidth then begin
- width := width + CharWidth('…');
- {$PUSH}
- {$R-}
- len := ord(s[0]);
- while (len > 0) and (width > maxwidth) do begin
- width := width - CharWidth(s[len]);
- len := len - 1;
- end;
- len := len + 1;
- s[0] := chr(len);
- s[len] := '…';
- {$POP}
- end;
- end;
-
- {$S}
- procedure SetItemEnable (mh: menuHandle; item: integer; enable: boolean);
- begin
- if enable then
- EnableItem(mh, item)
- else
- DisableItem(mh, item);
- end;
-
- {$S}
- procedure SetIDItemEnable (menu, item: integer; enable: boolean);
- begin
- SetItemEnable(GetMHandle(menu), item, enable);
- end;
-
- {$S}
- function GetItemEnable (mh: menuHandle; item: integer): boolean;
- begin
- if item > 31 then
- GetItemEnable := true
- else
- GetItemEnable := BTST(mh^^.enableFlags, item);
- end;
-
- {$S}
- function GetIDItemEnable (menu, item: integer): boolean;
- begin
- GetIDItemEnable := GetItemEnable(GetMHandle(menu), item);
- end;
-
- {$S Util}
- procedure DotItem (mh: menuHandle; item: integer; dotted: boolean);
- begin
- if dotted then
- SetItemMark(mh, item, '•')
- else
- SetItemMark(mh, item, chr(0));
- end;
-
- {$S Util}
- function MyFrontWindow: boolean;
- var
- wp: windowPtr;
- begin
- wp := FrontWindow;
- if wp = nil then
- MyFrontWindow := false
- else
- MyFrontWindow := windowPeek(wp)^.windowKind >= userKind;
- end;
-
- {$S Util}
- function DAFrontWindow: boolean;
- var
- wp: windowPtr;
- begin
- wp := FrontWindow;
- if wp = nil then
- DAFrontWindow := false
- else
- DAFrontWindow := windowPeek(wp)^.windowKind < 0;
- end;
-
- {$S Util}
- function GetIndStrSize (size, id, index: integer): str255;
- var
- s: str255;
- begin
- GetIndString(s, id, index);
- GetIndStrSize := copy(s, 1, size - 1);
- end;
-
- {$S Util}
- function GetDirID (wdrn: integer; var vrn: integer; var dirID: longInt): OSErr;
- var
- procID: longInt;
- oe: OSErr;
- begin
- oe := GetWDInfo(wdrn, vrn, dirID, procID);
- if oe <> noErr then begin
- vrn := wdrn;
- dirID := 0;
- end;
- GetDirID := oe;
- end;
-
- {$S Util}
- function GetVolInfo (var name: str63; var vrn: integer; index: integer; var CrDate: longInt): OSErr;
- var
- pb: paramBlockRec;
- oe: OSErr;
- begin
- with pb do begin
- if (name <> '') & (name[length(name)] <> ':') then
- name := concat(name, ':');
- pb.ioNamePtr := @name;
- ioVRefNum := vrn;
- ioVolIndex := index;
- oe := PBGetVInfo(@pb, false);
- if oe = noErr then begin
- vrn := ioVRefNum;
- CrDate := ioVCrDate;
- end;
- end;
- GetVolInfo := oe;
- end;
-
- {$S Util}
- procedure PlotSICN (id: integer; index, v, h: integer);
- var
- sh: Handle;
- bm: BitMap;
- r: Rect;
- gp: grafptr;
- begin
- sh := GetResource('SICN', id);
- HLock(sh);
- bm.baseAddr := Ptr(longInt(sh^) + (index - 1) * 32);
- bm.rowBytes := 2;
- SetRect(r, h, v, h + 16, v + 16);
- bm.bounds := r;
- GetPort(gp);
- CopyBits(bm, gp^.portBits, r, r, srcCopy, nil);
- HUnlock(sh);
- end;
-
- function HLockState (h: univ handle): signedByte;
- begin
- HLockState := HGetState(h);
- HLock(h);
- end;
-
- function LookupStrh (id: integer; match: str255): str255;
- var
- t, s: str255;
- i: integer;
- begin
- t := '';
- i := 1;
- repeat
- GetIndString(s, id, i);
- if s = match then begin
- GetIndString(t, id, i + 1);
- leave;
- end;
- i := i + 2;
- until s = '';
- LookupStrh := t;
- end;
-
- function LookupStrhNumber (id: integer; n: longInt): str255;
- var
- s, t: str255;
- begin
- NumToString(n, s);
- t := LookupStrh(id, s);
- if t = '' then
- t := s;
- LookupStrhNumber := t;
- end;
-
- procedure MemFill (p: univ ptr; len: longInt; value: integer);
- begin
- while (len > 0) do begin
- p^ := value;
- len := len - 1;
- longInt(p) := longInt(p) + 1;
- end;
- end;
-
- procedure ZeroFill (p: univ ptr; len: longInt);
- begin
- MemFill(p, len, 0);
- end;
-
- {$S Util}
- function CheckCancel: boolean;
- var
- er: eventRecord;
- begin
- if GetNextEvent(everyEvent, er) then
- with er do
- CheckCancel := (what = keyDown) and (BAND(message, charCodeMask) = ord('.')) and (BAND(modifiers, cmdKey) <> 0)
- else
- CheckCancel := false;
- end;
-
- procedure TrashHandle (h: handle);
- var
- p: ptr;
- i: longInt;
- begin
- if (h <> nil) & (h^ <> nil) then begin
- p := h^;
- for i := 1 to GetHandleSize(h) do begin
- p^ := -27;
- longInt(p) := longInt(p) + 1;
- end;
- end;
- end;
-
- procedure ZeroBlock (p: ptr; len: longInt);
- var
- i: longInt;
- begin
- for i := 1 to len do begin
- p^ := 0;
- longInt(p) := longInt(p) + 1;
- end;
- end;
-
- function WindowInWindowList (w: windowPtr): boolean;
- type
- windowPtrPtr = ^windowPtr;
- var
- nw: windowPtr;
- begin
- nw := windowPtrPtr($9D6)^;
- while (nw <> nil) & (w <> nw) do begin
- nw := windowPtr(windowPeek(nw)^.nextwindow);
- end;
- WindowInWindowList := nw <> nil;
- end;
-
- end.